﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Siav
{
    public partial class frmVales : Form
    {
        public frmVales()
        {
            InitializeComponent();
        }

        Validacoes Util = new Validacoes();

        private bool SalvarRegistro()
        {            
                using (SiavEntities Entidades = new SiavEntities())
                {
                    BarraMenu.Enabled = false;
                    if (txtCodigoVale.Text == string.Empty) //SE O CAMPOS ESTIVER VAZIO, ENTÃO INSERE
                    {
                        try
                        {
                            Vales Registro = new Vales();
                            Registro.Cliente = int.Parse(txtCodigoCliente.Text);
                            Registro.DataVencimento = DateTime.Parse(txtDataVencimento.Text);
                            Registro.Descricao = txtDescricao.Text;
                            Registro.Quantidade = decimal.Parse(txtQuantidade.Text);
                            Registro.DataVale = DateTime.Now;
                            Registro.Valor = decimal.Parse(txtValor.Text);
                            if (cbxPago.Checked == true)
                            {
                                Registro.Pago = true;
                            }
                            else
                            {
                                Registro.Pago = false;
                            }
                            /////////////////////////////////////////////////////////////////////////////
                            Entidades.AddObject("Vales", Registro);
                            Entidades.SaveChanges();
                            Validacoes.LimpaCamposFormulario(Controls);
                            BarraMenu.Enabled = true;
                            CarragaLista();
                            return true;
                        }
                        catch
                        {
                            return false;
                        }
                    }
                    else //CASO CONTRARIO ATUALIZA
                    {
                        try
                        {
                            int Codigo = int.Parse(txtCodigoVale.Text);
                            var Registro = Entidades.Vales.Where(Cod => Cod.IDVale == Codigo).FirstOrDefault();
                            if (txtCodigoVale.Text == string.Empty) //SE O CAMPOS ESTIVER VAZIO, ENTÃO INSERE
                            {
                                Registro.Cliente = int.Parse(txtCodigoCliente.Text);
                                Registro.DataVencimento = DateTime.Parse(txtDataVencimento.Text);
                                Registro.Descricao = txtDescricao.Text;
                                Registro.Quantidade = decimal.Parse(txtQuantidade.Text);
                                Registro.DataVale = DateTime.Now;
                                Registro.Valor = decimal.Parse(txtValor.Text);
                                /////////////////////////////////////////////////////////////////////////////                         
                                Entidades.SaveChanges();
                                Validacoes.LimpaCamposFormulario(Controls);
                                BarraMenu.Enabled = true;
                                CarragaLista();
                                return true;
                            }
                        } 
                        catch
                        {
                            return false;
                        }
                    }

                    return false;
                }

        }

        private void CarragaLista()
        {
            using (SiavEntities Entidades = new SiavEntities())
            {
                lstProdutos.Items.Clear();
                var Registros = Entidades.Vales.OrderByDescending(iD => iD.IDVale).ToList();

                foreach (Vales Registro in Registros)
                {
                    ListViewItem Item = new ListViewItem();
                    Item.Text = Registro.IDVale.ToString();
                    Item.SubItems.Add(Registro.Quantidade.ToString());
                    Item.SubItems.Add(Registro.Descricao);
                    Item.SubItems.Add(Registro.Valor.ToString());
                    decimal Total = decimal.Parse(Registro.Quantidade.ToString()) * decimal.Parse(Registro.Valor.ToString());
                    Item.SubItems.Add(Total.ToString());
                    Item.SubItems.Add(Registro.DataVale.Value.ToShortDateString());
                    Item.SubItems.Add(Registro.DataVencimento.Value.ToShortDateString());
                    lstProdutos.Items.Add(Item);

                }
            }
        }

        private void CarregaRegistro(string Codigo)
        {
            int CodigoRegistro = int.Parse(Codigo);
            using (SiavEntities Entidades = new SiavEntities())
            {
                var Registro = Entidades.Vales.Where(Cod => Cod.IDVale== CodigoRegistro).FirstOrDefault();
                txtCodigoVale.Text = Registro.IDVale.ToString();
                txtCodigoCliente.Text = Registro.Cliente.ToString();
                txtNomeRazao.Text = Registro.Clientes.RazaoSocial;
                txtDataVencimento.Text = Registro.DataVencimento.ToString();
                txtDescricao.Text = Registro.Descricao.ToString();
                txtQuantidade.Text = Registro.Quantidade.ToString();
                txtValor.Text = Registro.Valor.ToString();
                if (Registro.Pago == true)
                {
                    cbxPago.Checked = true;
                }
                else
                {
                    cbxPago.Checked = false;
                }                

            }
        }

        private void CarregaCliente(string IDCliente)
        {
            if (IDCliente != string.Empty)
            {
                using (SiavEntities Entidades = new SiavEntities())
                {
                    int Cliente = int.Parse(IDCliente);
                    var Clien = Entidades.Clientes.Where(Cli => Cli.Codigo == Cliente).FirstOrDefault();
                    txtNomeRazao.Text = Clien.RazaoSocial;
                    txtCodigoCliente.Text = Clien.Codigo.ToString();
                }
            }
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            Validacoes.LimpaCamposFormulario(Controls);
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (SalvarRegistro())
            {
                Validacoes.Informacao("Registro salvo com sucesso");               
            }
            else
            {
                Validacoes.Erro("Erro ao salvar o registro");                
            }
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void lstProdutos_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                CarregaRegistro(lstProdutos.SelectedItems[0].Text);
            }
            catch
            {

            }
        }

        private void btnLocalizarCliente_Click(object sender, EventArgs e)
        {
            using (frmPesquisaCliente PesquisaCliente = new frmPesquisaCliente())
            {
                PesquisaCliente.ShowDialog();
                CarregaCliente(PesquisaCliente.CodigoSelecionado);
                PesquisaCliente.Dispose();
            }
        }
    }
}
